Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]
Dica publicada em Java / Rede
Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]
O erro em si:
O erro acima ocorre porque o JBoss está tentando abrir um socket em uma porta menor que 1000. Por padrão, sistemas Unix like não permitem que usuários "mortais" (sem permissões) abram sockets nestas portas.
Para fazer um trace do erro, neste caso, não é necessário habilitar o debug do log para obter mais informações, somente com o log mostrando mensagens do nível INFO já conseguimos obter as informações necessárias.
# sh standalone.sh
Acompanhe os logs e procure pela linha do erro anterior destacado em negrito no trecho acima:
O erro destacado mostra que o erro ocorreu ao tentar subir o serviço remoting (org.jboss.as.remoting.AbstractStreamServerService.start).
Subindo o JBoss como root, verifique a linha semelhante:
Veja que conseguimos obter a porta que o JBoss estava tentando subir e que era a causadora do erro.
Para contornar esta situação, iremos alterar a porta deste serviço, para isso, edite o arquivo "standalone.xml" ou "domain.xml" e procure pelo bloco abaixo (geralmente no final do arquivo):
Repare no serviço "remoting" no trecho acima, altere-o para alguma porta qualquer, eu optei para mudá-la para: 4447
Após salvar e fechar, inicie o JBoss novamente com o usuário que deseja, para mais fácil entendimento, eu sempre uso o usuário: jboss
# sudo -u jboss sh standalone.sh
Acompanhe os logs e veja que o erro não irá mais acontecer:
A dica na íntegra, encontra-se em:
11:42:59,844 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.remoting.server.remoting-connector: org.jboss.msc.service.StartException in service jboss.remoting.server.remoting-connector: JBAS017113: Failed to start service
at org.jboss.as.remoting.AbstractStreamServerService.start(AbstractStreamServerService.java:111)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jbossmsc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_22]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_22]
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_22]
Caused by: java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind(Native Method) [rt.jar:1.6.0_22]
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119) [rt.jar:1.6.0_22]
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) [rt.jar:1.6.0_22]
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:52) [rt.jar:1.6.0_22]
at org.xnio.nio.NioXnioWorker.createTcpServer(NioXnioWorker.java:287)
at org.xnio.XnioWorker.createStreamServer(XnioWorker.java:135)
at org.jboss.remoting3.remote.RemoteConnectionProvider$ProviderInterface.createServer(RemoteConnectionProvider.java:209)
at org.jboss.as.remoting.AbstractStreamServerService.start(AbstractStreamServerService.java:101)
¿ 5 more
O erro acima ocorre porque o JBoss está tentando abrir um socket em uma porta menor que 1000. Por padrão, sistemas Unix like não permitem que usuários "mortais" (sem permissões) abram sockets nestas portas.
Para fazer um trace do erro, neste caso, não é necessário habilitar o debug do log para obter mais informações, somente com o log mostrando mensagens do nível INFO já conseguimos obter as informações necessárias.
Solução
Suba o JBoss como root:# sh standalone.sh
Acompanhe os logs e procure pela linha do erro anterior destacado em negrito no trecho acima:
O erro destacado mostra que o erro ocorreu ao tentar subir o serviço remoting (org.jboss.as.remoting.AbstractStreamServerService.start).
Subindo o JBoss como root, verifique a linha semelhante:
[org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /106.116.152.176:447
Veja que conseguimos obter a porta que o JBoss estava tentando subir e que era a causadora do erro.
Para contornar esta situação, iremos alterar a porta deste serviço, para isso, edite o arquivo "standalone.xml" ou "domain.xml" e procure pelo bloco abaixo (geralmente no final do arquivo):
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-
offset:0}">
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8109"/>
<socket-binding name="http" port="8180"/>
<socket-binding name="https" port="8543"/>
<socket-binding name="osgi-http" interface="management" port="8190"/>
<socket-binding name="remoting" port="447"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8109"/>
<socket-binding name="http" port="8180"/>
<socket-binding name="https" port="8543"/>
<socket-binding name="osgi-http" interface="management" port="8190"/>
<socket-binding name="remoting" port="447"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
Repare no serviço "remoting" no trecho acima, altere-o para alguma porta qualquer, eu optei para mudá-la para: 4447
<socket-binding name="remoting" port="4447"/>
Após salvar e fechar, inicie o JBoss novamente com o usuário que deseja, para mais fácil entendimento, eu sempre uso o usuário: jboss
# sudo -u jboss sh standalone.sh
Acompanhe os logs e veja que o erro não irá mais acontecer:
INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /103.113.152.176:4447
A dica na íntegra, encontra-se em:
http://www.hrstatus.com.br/2012/12/caused-by-java-net-socketexception-permission-denied-quando-inici...